package taller2.interfaces;

import java.util.ArrayList;

import taller2.model.graph.NodeImpl;
import taller2.utils.Constants.Colores;
import taller2.utils.Point;

public interface Node {
	
	// returns the connections the node has (for drawing and internal use only!!)
	public ArrayList<Connection> getConnections();
	
	// creates a connection between the two nodes (only if there is no previous one)
	public void addConnection(Node otherNode,int weight);	
	
	// deletes the connections from node to otherNode
	public void deleteConnections(Node otherNode);	

	// changes the tag for the node
	public void setTag(String tag);
	
	// returns the tag for the node
	public String getTag();
	
	// returns the Point
	public Point getPos();

	// marks the node to be shown in other color
	public void select();

	// unmarks the node so its shown normally
	public void unselect();
	
	// unmarks the connections so its shown normally
	public void unselectConnections();

	// changes color of the node
	public void changeColor(Colores color);
	
	// permits having a node in two colors (half the node each)
	public void addColor(Colores color);
	
	// returns color of the node
	public Colores getColor();
	
	// returns true if the node is selected 
	public boolean isSelected();
	
	// changes the Point
	public void setPos(Point newPos);

	// marks the node as used
	public void mark();

	// unmarks the node as used
	public void unmark();
	
	// returns true if the node is marked as used
	public boolean isMarked();
	
    public String getID();

    public int getNumberId();

    // sets the marker for dijstra's algorithm
    public void setMarker(String newMarker);
    
    // gets the marker for dijstra's algorithm
	public String getMarker();

	// returns true if the nodes are equal
	public boolean equals(NodeImpl other);

	// selects the connection from this node to the other
	public void selectConnectionTo(Node other);
	
	// selects the connections between this node to the other
	public void selectConnectionsWith(Node other);

	public void setId(int i);

	public Connection getConnectionTo(Node other);

	public void unSelectConnectionTo(Node end);

	public void unSelectConnectionsWith(Node end);

}
